package frsf.cidisi.exercise.proyectoia.situationcalculus;

import frsf.cidisi.faia.agent.Action;

import java.util.Vector;

import frsf.cidisi.faia.agent.Agent;
import frsf.cidisi.faia.environment.Environment;


public class DroneMapa extends Environment {

    public DroneMapa() {
        this.environmentState = new StateMapa();
    }

    @Override
    public StateMapa getEnvironmentState() {
        return (StateMapa) super.getEnvironmentState();
    }

    @Override
    public DronePerception getPercept() {
    	
        DronePerception percepcion = new DronePerception();
        
        // Obtener la posicion actual del agente
        int fila = this.getEnvironmentState().getAgentPosition()[0];
        int columna = this.getEnvironmentState().getAgentPosition()[1];
        percepcion.setColumna(columna);
        percepcion.setFila(fila);
        
        // Seteamos la antena
        int[] antena = {0,0,0,0,0,0,0,0,0}; 
        for(int i=0; i<3; i++)
        	for(int j=0; j<3; j++)
        		if(this.getEsquina(i, j) != 0)
        			antena[(i*3)+j] = 1; 
        
        percepcion.setPersonas(antena);
        
        // Seteamos las esquinas Vistas
        int[] vistas = {0,0,0,0,0,0,0,0,0};
        for(int i=0; i<3; i++)
        	for(int j=0; j<3; j++){
        		if(i == fila)
        			vistas[(i*3)+j] = 2;
        		if(j == columna)
        			vistas[(i*3)+j] = 2;
        	}
        percepcion.setEsquinasVistas(vistas);
        
     // Seteamos la esquina del Victimario
        
        int x = this.getVictimario()[0];
        int y = this.getVictimario()[1];
        int[] victimario = {0,0,0,0,0,0,0,0,0};
        if(fila == x || columna == y)
        	victimario[(x*3)+y] = -1;
        percepcion.setVictimario(victimario);

        return percepcion;
    }
    
    @Override
    public String toString() {
        return this.environmentState.toString();
    }
    
    // Estos metodos son internos
    public int getEsquina(int fila, int columna){
    	return ((StateMapa) this.environmentState).getEsquina(fila, columna);
    }
    
    public int[] getVictimario(){
    	return ((StateMapa) this.environmentState).getVictimario();
    }
}
